//
//  NormalizeImage.hpp
//  TestOpenCV
//
//  Created by CityDo on 2019/8/23.
//  Copyright © 2019 CityDo. All rights reserved.
//

#ifndef NormalizeImage_h
#define NormalizeImage_h



#include <stdio.h>

#endif /* NormalizeImage_h */

#include <stdio.h>
#include <string.h>
//#include <iostream>

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/types_c.h>
//#include <opencv2/imgcodecs/ios.h>

#include <opencv2/opencv.hpp>
#include <iomanip>
#include <vector>
#include <opencv2/core/core.hpp>



namespace normalize{
    class Image {
    public:
        
        void init(std::string strDetectorFile, std::string strSettingFile);
        
        void findBbox(cv::Mat &src, std::vector<int> &Bbox,int frameIdx,cv::Mat &tempSrc,float &time);
        void bestFitBbox(cv::Mat &fitShape, cv::Mat &meanShape, std::vector<int> &box,float &maxSize);
        void bestFitSrc2Dst(cv::Mat &dst, cv::Mat &src, cv::Mat &Rot,cv::Mat &Trans);
        void cropImg(cv::Mat &src, cv::Mat &meanShape, cv::Mat &initshape,cv::Mat &dstImg,cv::Mat &dstInitshape,cv::Mat &dstRot,cv::Mat &dstTrans, float &maxSize);
//        void normImg(cv::Mat &src, cv::Mat &dstImg, cv::Mat &dstInitshape, cv::Mat &dstRot, cv::Mat &dstTrans,std::vector<int> &box,float &time);
        void normImg(cv::Mat &src, cv::Mat &dstImg, cv::Mat &dstInitshape, cv::Mat &dstRot, cv::Mat &dstTrans, std::vector<int> inBbox, int frameIdx,std::vector<int> &outBox,float &time);
        
        void affineLandmarks(float(&src)[136], int(&dst)[136], cv::Mat &Rot, cv::Mat &Trans);
        
    };
}
